package com.sinoglobal.sinostore.adapter;

import java.lang.reflect.Field;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.sinoglobal.sinostore.system.Constants;
import com.sinoglobal.sinostore.utils.ResUtiles;
/**
 * 
* @title: SimpleBaseAdapter.java 
* @package com.sinoglobal.app.adapter 
* @description: 根据传进来的java bean T的属性名和值 通过反射 找相应的控件id 并为之填充数据
*  要求item里的控件id名称必须和bean的属性名称相对应，
*  这里只是对常用的 TextView和 ImageView 做了简单的 setText 和 用finalbitmap对图片做了处理,
*  如果有具体的业务控制则不要用此类，因为此类仅仅只是 获取了属性的String.valueOf 值来填充
*  如果对图片的处理不定，可以考虑将图片的处理写成抽象方法让子类来实现 图片的处理
*  由于采用反射机制(对性能有开销），如果对性能（效率）要求较高则慎用该类
* @author zrh
* @date 2014-11-25 下午12:41:27
 */
public class SimpleBaseAdapter<T> extends AbBaseAdapter<T> {
    private  Bitmap defaultPic;
    private Field[] fields;
    public void setDefaultPic(Bitmap defaultPic) {
		this.defaultPic = defaultPic;
	}
	public SimpleBaseAdapter(Context context, int layoutId) {
		super(context, layoutId);
	}
     
	public SimpleBaseAdapter(Context context, int layoutId, List<T> data) {
		super(context, layoutId, data);
	}
	@Override
	void setView(int position, View convertView) {
		if(fields==null){
			fields=getItem(position).getClass().getDeclaredFields();
		}
		if(fields!=null && fields.length>0){
			for(Field field : fields){
				try {
					field.setAccessible(true);
//					LogUtil.e(" field.getName()=="+ field.getName());
//					LogUtil.e(" ImgUtiles.getDrwableForName(context, field.getName())=="+ ResUtiles.getDrwableForName(context, field.getName()));
					View view=ViewHolder.getViewById(convertView,ResUtiles.getIdForName(context, field.getName()));
					T t=getItem(position);
					String value=String.valueOf(field.get(t));
//					LogUtil.e("value=="+value);
					if(view instanceof TextView){
						TextView tV=(TextView) view;
						tV.setText(value);
					}else if(view instanceof ImageView){
						//TODO
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	
}
